package br.com.it4.zmed.entity;

import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

/**
 * Entidade básica representando o paciente.
 * 
 * @author Mozart Silva (mozart.vsilva@gmail.com)
 * 
 */
@Entity
@Table(name = "ZME_PACIENTE", schema = "ZMED")
public class Paciente {

    /** O código do paciente. */
    @Id
    @SequenceGenerator(name = "SEQ_ZME_PACIENTE_ID", sequenceName = "ZMED.SEQ_ZME_PACIENTE")
    @GeneratedValue(generator = "SEQ_ZME_PACIENTE_ID", strategy = GenerationType.SEQUENCE)
    @Column(name = "PAC_CODIGO")
    private Long codigo;

    /** O nome do paciente. */
    @Column(name = "PAC_NOME")
    private String nome;

    /** O cpf do paciente. */
    @Column(name = "PAC_CPF")
    private String cpf;

    @Temporal(TemporalType.DATE)
    @Column(name = "PAC_DATA_NASCIMENTO")
    private Date dataNascimento;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "TSE_CODIGO")
    private TipoSexo sexo;

    /** O nome da mãe do paciente. */
    @Column(name = "PAC_NOME_MAE")
    private String nomeMae;

    /** O nome do pai do paciente. */
    @Column(name = "PAC_NOME_PAI")
    private String nomePai;

    /**
     * @return O codigo a ser recuperado.
     */
    public Long getCodigo() {
        return codigo;
    }

    /**
     * @param codigo
     *            O codigo a ser atribuido.
     */
    public void setCodigo(Long codigo) {
        this.codigo = codigo;
    }

    /**
     * @return O nome a ser recuperado.
     */
    public String getNome() {
        return nome;
    }

    /**
     * @param nome
     *            O nome a ser atribuido.
     */
    public void setNome(String nome) {
        this.nome = nome;
    }

    /**
     * @return O cpf a ser recuperado.
     */
    public String getCpf() {
        return cpf;
    }

    /**
     * @param cpf
     *            O cpf a ser atribuido.
     */
    public void setCpf(String cpf) {
        this.cpf = cpf;
    }

    /**
     * @return O dataNascimento a ser recuperado.
     */
    public Date getDataNascimento() {
        return dataNascimento;
    }

    /**
     * @param dataNascimento
     *            O dataNascimento a ser atribuido.
     */
    public void setDataNascimento(Date dataNascimento) {
        this.dataNascimento = dataNascimento;
    }

    /**
     * @return O sexo a ser recuperado.
     */
    public TipoSexo getSexo() {
        return sexo;
    }

    /**
     * @param sexo
     *            O sexo a ser atribuido.
     */
    public void setSexo(TipoSexo sexo) {
        this.sexo = sexo;
    }

    /**
     * @return O nomeMae a ser recuperado.
     */
    public String getNomeMae() {
        return nomeMae;
    }

    /**
     * @param nomeMae
     *            O nomeMae a ser atribuido.
     */
    public void setNomeMae(String nomeMae) {
        this.nomeMae = nomeMae;
    }

    /**
     * @return O nomePai a ser recuperado.
     */
    public String getNomePai() {
        return nomePai;
    }

    /**
     * @param nomePai
     *            O nomePai a ser atribuido.
     */
    public void setNomePai(String nomePai) {
        this.nomePai = nomePai;
    }

}
